package com.bjpowernode.util;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;
import java.util.regex.Pattern;

import static com.bjpowernode.constants.Constant.*;

/**
 * @author 麦翔盛
 * @ClassName: CommonUtils
 * @Package: com.bjpowernode.util
 * @description: 工具类
 * @date 2022/5/19 21:37
 */
public class CommonUtils {

    /**
     * 获取默认页面
     *
     * @param pageNo 页面
     */
    public static Integer getDefPageNo(Integer pageNo) {
        if (pageNo == null || pageNo < 1) {
            return DEFAULT_PAGE_NO;
        }
        return pageNo;
    }

    /**
     * 获取默认的每页限制数量
     *
     * @param pageSize 每页限制数量
     */
    public static Integer getDefPageSize(Integer pageSize) {
        if (pageSize == null || pageSize < 1) {
            return DEFAULT_PAGE_SIZE;
        }
        return pageSize;
    }

    /**
     * 用户手机脱敏
     * 4 - 8 位替换成 *
     * 将 13543632698 -> 135******698
     *
     * @return 获取脱敏后的用户手机
     */
    public static String getSafePhone(String phone) {

        //如果为空 或者 不为11位，返回空
        if (null == phone || phone.length() != PHONE_LENGTH) {
            return "";
        }
        return phone.substring(0, 3) + "******" + phone.substring(9);
    }

    /**
     * 校验手机格式
     *
     * @param phone 手机号码
     * @return 格式是否正确
     */
    public static boolean checkPhone(String phone) {

        boolean flag = false;
        //先判断是否为空 或者 是否为11位
        if (phone != null && phone.length() == PHONE_LENGTH) {
            //校验格式
            flag = Pattern.matches("^1[1-9]\\d{9}$", phone);
        }

        return flag;
    }


    /**
     * 校验密码格式 (密码不能为空 而且长度为32位)
     *
     * @param password 密码
     * @return 密码格式是否正确
     */
    public static boolean checkPassword(String password) {
        boolean flag = false;
        if (!StringUtils.isAnyBlank(password) && password.length() == PASSWORD_LENGTH) {
            flag = true;
        }
        return flag;
    }

    /**
     * 根据uuid生成token
     *
     * @return token
     */
    public static String getRandomToken() {
        return UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
    }

    /**
     * 格式化日期 转换成为字符串
     *
     * @param date 需要转换的日期
     * @return
     */
    public static String formatDate(Date date) {
        if (date != null) {
            return DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
        }
        return null;
    }

    /**
     * num1 是否大于等于 num2
     * @param num1 num1
     * @param num2 num2
     * @return num1 是否大于等于 num2
     */
    public static  boolean ge(BigDecimal num1,BigDecimal num2){
        if (num1 == null || num2 == null){
            throw new RuntimeException("参数不能为null");
        }
        return num1.compareTo(num2) >= 0;
    }

    /**
     * num1 是否小于等于 num2
     * @param num1 num1
     * @param num2 num2
     * @return num1 是否小于 num2
     */
    public static  boolean lt(BigDecimal num1,BigDecimal num2){
        if (num1 == null || num2 == null){
            throw new RuntimeException("参数不能为null");
        }
        return num1.compareTo(num2) < 0;
    }

    /**
     * num1 是否等于 num2(判断数值上 大数 num1是否等于 num2)
     * @param bigDecimalNum 大数num
     * @param douNum 浮点型num
     * @return
     */
    public static boolean eq(BigDecimal bigDecimalNum, Double douNum) {
        if (bigDecimalNum == null || douNum == null) {
            throw new RuntimeException("参数不能为null");
        }
        return bigDecimalNum.compareTo(new BigDecimal(douNum)) == 0;
    }
}

